<?
	/* Se asegura que el archivo es incluido por el index */
		defined( 'LOAD_MODULE_ACTION' ) or die( 'No esta permitido el acceso directo a ' . __FILE__ );
	/* Cuando se hace el include del archivo automaticamente crea un objeto y lo guarda en una variable temporal */
		$this->oTmpObject = new Domicilio_Exe( $this );

  class Domicilio_Exe extends Exe
  {

  function Domicilio_Exe ( &$oModule)
    {
			$this->Exe( $oModule );
    }

	function delete()
	{
		$ncDomicilio = getParam( 'ncDomicilio' );
		if ( $ncDomicilio )
		{
			$this->oDatabase->delete( "atDomicilioZona", "ncDomicilio", $ncDomicilio );
			$this->oDatabase->delete( "atDomicilioRural", "ncDomicilio", $ncDomicilio );
			$this->oDatabase->delete( "atDomicilioSuburbano", "ncDomicilio", $ncDomicilio );
			$this->oDatabase->delete( "atDomicilioUrbano", "ncDomicilio", $ncDomicilio );
			$this->oDatabase->delete( "atDomicilio", "ncDomicilio", $ncDomicilio );
		}

	}
	function update()
		{
			// Convierte a variables los datos del Formulario asociado a la accion
			$oForm = $this->oModule->loadClass( 'Domicilio_frm' );
			extract( $oForm->getFieldArray() );
			$cCalleInterseccion = $oForm->aFields['cCalleInterseccion']->getDescription();
			list ( $ncPais , $ncUbicacion ) = explode( "|", $ncUbicacion  );

			// Modifica el Domicilio
			$this->oDatabase->update( "atDomicilio",
					"ncPais", $ncPais,
					"ncUbicacion", $ncUbicacion,
					"cPostal", $cPostal,
					"cPrefijoTelefono", $cPrefijoTelefono,
					"cTelefono", $cTelefono,
					"cFax", $cFax,
					"nLatitud", $nLatitud,
					"nLongitud", $nLongitud,
					"WHERE",
					"ncDomicilio", $ncDomicilio);
			if ( $nTipoDomicilioAnterior != $nTipoDomicilio )
			{
				switch( $nTipoDomicilioAnterior )
				{
					case DOMICILIO_URBANO:
						$this->oDatabase->delete( "atDomicilioUrbano", "ncDomicilio", $ncDomicilio);
					break;
					case DOMICILIO_ZONA:
						$this->oDatabase->delete( "atDomicilioZona",	"ncDomicilio", $ncDomicilio);
					break;
					case DOMICILIO_RURAL:
						$this->oDatabase->delete( "atDomicilioRural",	"ncDomicilio", $ncDomicilio);
					break;
					case DOMICILIO_SUBURBANO:
						$this->oDatabase->delete( "atDomicilioSuburbano", "ncDomicilio", $ncDomicilio);
					break;
					case DOMICILIO_POSTAL:
						$this->oDatabase->delete( "atDomicilioPostal", "ncDomicilio", $ncDomicilio);
					break;
				}
				switch( $nTipoDomicilio )
				{
					case DOMICILIO_URBANO:
						$this->oDatabase->insert( "atDomicilioUrbano",
											"cCalle", $cCalle,
											"cCalleInterseccion", $cCalleInterseccion,
											"nNumero", $nNumero,
											"cTorre", $cTorre,
											"cPiso", $cPiso,
											"cDepto", $cDepto,
											"ncDomicilio", $ncDomicilio);
					break;
					case DOMICILIO_RURAL:
						$this->oDatabase->insert( "atDomicilioRural",
											"ncRuta", $ncRuta,
											"nKilometro", $nKilometro,
											"ncDomicilio", $ncDomicilio);
					break;
					case DOMICILIO_ZONA:
						$this->oDatabase->insert( "atDomicilioZona",
											"cCalleA", $cCalleA,
											"cCalleB", $cCalleB,
											"cCalleC", $cCalleC,
											"cCalleD", $cCalleD,
											"ncDomicilio", $ncDomicilio);
					break;
					case DOMICILIO_SUBURBANO:
						$this->oDatabase->insert( "atDomicilioSuburbano",
											"cDescripcion", $cDescripcion,
											"ncDomicilio", $ncDomicilio);
					break;
					case DOMICILIO_POSTAL:
						$this->oDatabase->insert( "atDomicilioPostal",
											"cCasilla", $cCasilla,
											"ncDomicilio", $ncDomicilio);
					break;
				}
			} else
			{
				switch( $nTipoDomicilio )
				{
					case DOMICILIO_URBANO:
						$this->oDatabase->update( "atDomicilioUrbano",
											"cCalle", $cCalle,
											"cCalleInterseccion", $cCalleInterseccion,
											"nNumero", $nNumero,
											"cTorre", $cTorre,
											"cPiso", $cPiso,
											"cDepto", $cDepto,
											"WHERE",
											"ncDomicilio", $ncDomicilio);
						$cDomicilio = $cCalle . ' ' . $nNumero;
					break;
					case DOMICILIO_RURAL:
						$this->oDatabase->update( "atDomicilioRural",
											"ncRuta", $ncRuta,
											"nKilometro", $nKilometro,
											"WHERE",
											"ncDomicilio", $ncDomicilio);
						$cDomicilio = $ncRuta. ' ' . $nKilometro;
					break;
					case DOMICILIO_ZONA:
						$this->oDatabase->update( "atDomicilioZona",
											"cCalleA", $cCalleA,
											"cCalleB", $cCalleB,
											"cCalleC", $cCalleC,
											"cCalleD", $cCalleD,
											"WHERE",
											"ncDomicilio", $ncDomicilio);
						$cDomicilio = $cCalleA. ' ' . $cCalleB. ' ' . $cCalleC. ' ' . $cCalleD;
					break;
					case DOMICILIO_SUBURBANO:
						$this->oDatabase->update( "atDomicilioSuburbano",
											"cDescripcion", $cDescripcion,
											"WHERE",
											"ncDomicilio", $ncDomicilio);
						$cDomicilio = $cDescripcion;
					break;
					case DOMICILIO_POSTAL:
						$this->oDatabase->update( "atDomicilioPostal",
											"cCasilla", $cCasilla,
											"WHERE",
											"ncDomicilio", $ncDomicilio);
						$cDomicilio = $cCasilla;
					break;
				}
			}
		$this->setInputData( $ncDomicilio, $cDomicilio);
		return $ncDomicilio;
    }
	function insert()
		{
			// Convierte a variables los datos del Formulario asociado a la accion
			$oForm = $this->oModule->loadClass( 'Domicilio_frm' );
			extract( $oForm->getFieldArray() );
			$cCalleInterseccion = $oForm->aFields['cCalleInterseccion']->getDescription();
			list ( $ncPais , $ncUbicacion ) = explode( "|", $ncUbicacion );
			if ( empty($ncPais) )
			{
				if ( $cTelefono || $cCalle || $cDescripcion || $ncRuta )
				{
					addMessage("Por favor ingrese la ubicacion");
				}
				return false;
			}

      $ncDomicilio = $this->oDatabase->nextKey("atDomicilio", "ncDomicilio");
	    // Agrega el Domicilio
      $this->oDatabase->beginTran();
      $bOk = $this->oDatabase->insert( "atDomicilio",
                "ncPais", $ncPais,
                "ncUbicacion", $ncUbicacion,
                "cPostal", $cPostal,
                "cPrefijoTelefono", $cPrefijoTelefono,
                "cTelefono", $cTelefono,
                "cFax", $cFax,
				"nLatitud", $nLatitud,
				"nLongitud", $nLongitud,
                "ncDomicilio", $ncDomicilio);
      switch( $nTipoDomicilio )
      {
        case DOMICILIO_URBANO:
					if ( $cCalle )
					{
						$bOk = $this->oDatabase->insert( "atDomicilioUrbano",
											"cCalle", $cCalle,
											"cCalleInterseccion", $cCalleInterseccion,
											"nNumero", $nNumero,
											"cTorre", $cTorre,
											"cPiso", $cPiso,
											"cDepto", $cDepto,
											"ncDomicilio", $ncDomicilio);
						$cDomicilio = $cCalle . ' ' . $nNumero;
					}
        break;
        case DOMICILIO_RURAL:
					if ( $ncRuta )
					{
						$bOk = $this->oDatabase->insert( "atDomicilioRural",
											"ncRuta", $ncRuta,
											"nKilometro", $nKilometro,
											"ncDomicilio", $ncDomicilio);
						$cDomicilio = $ncRuta. ' ' . $nKilometro;
					}
        break;
        case DOMICILIO_ZONA:
					if ( $cCalleA )
					{
						$bOk = $this->oDatabase->insert( "atDomicilioZona",
											"cCalleA", $cCalleA,
											"cCalleB", $cCalleB,
											"cCalleC", $cCalleC,
											"cCalleD", $cCalleD,
											"ncDomicilio", $ncDomicilio);
						$cDomicilio = $cCalleA. ' ' . $cCalleB. ' ' . $cCalleC. ' ' . $cCalleD;
					}
        break;
        case DOMICILIO_SUBURBANO:
					if ( $cDescripcion )
					{
						$bOk = $this->oDatabase->insert( "atDomicilioSuburbano",
											"cDescripcion", $cDescripcion,
											"ncDomicilio", $ncDomicilio);
						$cDomicilio = $cDescripcion;
					}
        break;
        case DOMICILIO_POSTAL:
					if ( $cCasilla )
					{
						$bOk = $this->oDatabase->insert( "atDomicilioPostal",
											"cCasilla", $cCasilla,
											"ncDomicilio", $ncDomicilio);
						$cDomicilio = $cCasilla;
					}
        break;
      }
			if ( $bOk == false )
			{
				addMessage( 'No se pudo dar de alta el domicilio / telefono' );
				$this->oDatabase->rollBackTran();
				return false;
			}
			$this->oDatabase->commitTran();
			$this->setInputData( $ncDomicilio, $cDomicilio);
      return $ncDomicilio;
    }

  function save()
    {
			$oForm = $this->oModule->loadClass( 'Domicilio_frm' );
      if ( $oForm->aFields['ncDomicilio']->getValue() == '' )
      {
        return $this->insert();
      } else
      {
        return $this->update();
      }
    }
  }
?>